package com.example.file_demo.util;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

public class PathUtils {

    /**
     * 将文件的绝对路径转换为相对于基准目录的相对路径。
     *
     * @param basePath 基准目录的绝对路径（字符串形式）
     * @param filePath 文件的绝对路径（字符串形式）
     * @return 相对路径（字符串形式），如果转换失败则返回null
     */
    public static String getRelativePath(String basePath, String filePath) {
        // 将字符串转换为Path对象
        Path baseDirPath = Paths.get(basePath);
        Path fileDirPath = Paths.get(filePath);

        try {
            // 确保基准目录是一个真实存在的目录
            File baseDirFile = baseDirPath.toFile();
            if (!baseDirFile.exists() || !baseDirFile.isDirectory()) {
                throw new IllegalArgumentException("基准目录不存在或不是一个目录: " + basePath);
            }

            // 将文件的绝对路径转换为相对于基准目录的相对路径
            Path relativePath = baseDirPath.relativize(fileDirPath);

            // 返回相对路径的字符串形式
            return relativePath.toString();
        } catch (Exception e) {
            // 如果发生任何异常（例如，路径不存在或不是一个有效的路径），则返回null
            return null;
        }
    }

    /**
     * 将Windows风格的相对路径转换为Unix/Linux风格的相对路径，并确保以斜杠`/`开头。
     *
     * @param windowsPath Windows风格的相对路径，使用反斜杠`\`作为分隔符。
     * @return 转换后的Unix/Linux风格的相对路径，使用正斜杠`/`作为分隔符，并以`/`开头。
     */
    public static String convertWindowsRelativePathToUnixPath(String windowsPath) {
        // 使用replace方法将所有的反斜杠`\`替换为正斜杠`/`
        String unixPath = windowsPath.replace("\\", "/");
        // 如果转换后的路径不以`/`开头，则添加`/`
        if (!unixPath.startsWith("/")) {
            unixPath = "/" + unixPath;
        }
        return unixPath;
    }
}
